#include <stdlib.h>
#include <string.h>

#include "input.h" 
#include "simpleList.h" 
#include "listcmp.h"

//#define LC_DEBUG


// Verifica se a palavra pertence a lista de palavras
// Requer:
//	- lista de palavras
//	- palavra a ser comparada
// Retorna:
//	- vetor
struct Vector *lstcmp(struct wordList *haystack, const char *needle)
{
    unsigned long i, j, N, M;
    
    struct simpleList *L;
    struct Vector *V; 

    L = initList();

    N = strlen(haystack->list);
    M = strlen(needle);

	// procura a palavra na lista de palavras
    for(i = 0; i < N; i++)
	{
        if(haystack->mark[i] == 1) continue;
        if(haystack->list[i] == ',') continue;
        if(haystack->list[i] == needle[0])
		{
            for(j = 0; j < M; j++)
			{
                if(haystack->list[j+i] == ',') break;
                if(haystack->list[j+i] == '\0') break;
                if(needle[j] != haystack->list[i+j]) break;
            }
            // palavra encontrada, adiciona a posicao na lista
            if(j == M){ addToList(L, i); }
        }
    }

	//copia a lista para o vetor
    V = listToVector(L);
    
    freeList(L);

    return V;
}


// Junta o vetor parcial na lista de palavras oficial
// Requer:
//	- lista de palavras
//	- vetor parcial de palavras
//	- tamanho
void glueChunks(struct wordList *official, struct Vector *partial, unsigned long length)
{
    unsigned long i, j, N, M;

    N = partial->length;

    for(i = 0; i < N; i++)
	{
        if(i > official->size) { break; }
        M = partial->v[i]+length;
        j = partial->v[i];
		
        for(;j < M; j++)
		{
            if(j > official->size) { break; }
            official->mark[j] = 1;
        }
    }
}


// Atualiza a porcentagem de palavras encontrada
// Requer:
//	- lista de palavras
//	- estrutura para armazenar a porcentagem 
// Retorna:
//	- porcentagem de palavras encontrada
int updateStatus(struct wordList *WL, struct Percentage *P)
{    
    int PC;
 
    P->part = (P->total)-(WL->size); 
 
    PC = (P->part*100)/P->total;

    #ifdef LC_DEBUG
        printf("%f = %lu/%lu\n", PC, P->part, P->total);
        if(PC != PC) printf("****************************************");
    #endif
    

    P->percent = (float) PC;
    return PC;
}
